#ifndef USB_CAMERA_H
#define USB_CAMERA_H

#include <string>
#include <atomic>
#include <thread>
#include <mutex>  // 引入 std::mutex 所需头文件
#include <opencv2/opencv.hpp>

class UsbCamera {
public:
    UsbCamera(const std::string& device, int width, int height, int fps);
    ~UsbCamera();

    // 启动摄像头捕获
    bool start();
    // 停止摄像头捕获
    void stop();
    // 获取当前帧（MJPEG 编码，用于网络传输）
    bool getFrame(std::vector<uchar>& mjpeg_frame);
    // 检查摄像头是否正常工作
    bool isRunning() const;

private:
    // 捕获线程函数
    void captureLoop();

    std::string device_;       // 摄像头设备节点（/dev/video0）
    int width_;                // 分辨率宽
    int height_;               // 分辨率高
    int fps_;                  // 帧率
    cv::VideoCapture cap_;     // OpenCV 捕获对象
    std::atomic<bool> running_;// 运行标志
    std::thread capture_thread_;// 捕获线程
    cv::Mat frame_;            // 当前帧（缓存）
    std::mutex frame_mutex_;   // 帧缓存互斥锁
};

#endif // USB_CAMERA_H